gl renderer: Fix hidpi cairo node rendering
authorTimm Bäder <mail@baedert.org>
Sat, 27 Jan 2018 10:02:07 +0000 (11:02 +0100)
committerTimm Bäder <mail@baedert.org>
Sat, 27 Jan 2018 10:06:38 +0000 (11:06 +0100)
We can't just unconditionally create a larger texture here, since the
incoming cairo surface might have a device scale that doesn't fit our
scale_factor. Instead, look up the surface device scale and use that.

gsk/gl/gskglrenderer.c

index dc97ebf4e03c902fa609e86de3eb08d2c4267fc9..00dc36416d017e1ffbf8084242229b9f3f6f69fb 100644 (file)
@@ -638,15 +638,18 @@ render_cairo_node (GskGLRenderer       *self,
   const cairo_surface_t *surface = gsk_cairo_node_peek_surface (node);
   int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST;
   int texture_id;
+  double scale_x, scale_y;
 
   if (surface == NULL)
     return;
 
   get_gl_scaling_filters (node, &gl_min_filter, &gl_mag_filter);
 
+
+  cairo_surface_get_device_scale ((cairo_surface_t *)surface, &scale_x, &scale_y);
   texture_id = gsk_gl_driver_create_texture (self->gl_driver,
-                                             node->bounds.size.width * self->scale_factor,
-                                             node->bounds.size.height * self->scale_factor);
+                                             node->bounds.size.width * scale_x,
+                                             node->bounds.size.height * scale_y);
   gsk_gl_driver_bind_source_texture (self->gl_driver, texture_id);
   gsk_gl_driver_init_texture_with_surface (self->gl_driver,
                                            texture_id,